【実践プログラミング編:第6回】
本連載では、FA現場で戦うための実務特化型プログラミングを解説します。
- CMP命令を使ったら、知らない間に別のMリレーが上書きされてバグった
- 比較命令の種類が多すぎて、どれを使えばいいか分からない
- センサーの数値でポンプを制御したら、激しくバタついて設備が壊れそうになった
実務経験9年の現役電気設計エンジニアとして断言します。 これまで学んできたデジタル(ON/OFF)の接点と同じ感覚で、アナログユニットから受け取った「数値」を単一の条件で判定するのは、設備を物理的に破壊する恐れのある極めて危険な設計です。
本記事では、数値を扱う基本となる「CMP命令」と「接点比較命令」の正しい使い分けと、足し算・引き算(四則演算)を組み合わせて出力を安定させる「ヒステリシス(不感帯)制御」の極意を解説します。
この記事を読めば、数値の揺らぎを安全に処理する実戦的な型が身につき、どんな現場でもピタッと安定して動く堅牢なプログラムが書けるようになります。
【本連載の前提】
本記事内のプログラム例や命令語は、国内FA業界で最もシェアの高い「三菱電機製PLC(MELSEC)」をベースに解説しています。しかし、ここで解説する「なぜその命令が必要なのか」「現場でどう使うのか」という設計思想は、オムロンやキーエンスなど、すべてのメーカーのPLCで共通して使える普遍的な技術です。メーカーの違いを恐れず、本質的な「設計の根幹」を身につけてください。
第1章:数値を比べる2つの手法(CMP命令と接点比較命令)
センサーから入ってくる温度や圧力といった「連続する数値(アナログ値)」をプログラムで扱う際、最も基本となるのが「数値を比べる(比較命令)」という処理です。
PLCには大きく分けて「CMP(比較)命令」と「接点比較命令(<、=、>)」の2種類が用意されています。まずは、実務におけるこの2つの「明確な使い分け」を理解してください。
3つの分岐を同時に処理する「CMP命令」
CMP命令は、2つの数値を比較した結果を「指定したデバイスから連続する3点(大・一致・小)」に同時に出力する命令です。
百聞は一見に如かず、実際のラダー図を見てみましょう。製品の重量(D100)と、基準値(K500)を比較する例です。
(製品の重量[D100]と基準値[K500]を比較し、M0~M2に出力)
[ CMP D100 K500 M0 ]
(比較結果に応じた3つの分岐処理)
[ M0 (D100 > K500) ] ────── ( Y20 重量オーバー排出 )
[ M1 (D100 = K500) ] ────── ( Y21 合格ライン搬送 )
[ M2 (D100 < K500) ] ────── ( Y22 重量不足排出 )

- 実務での使い所: このように、「上限オーバー(NG)」「合格(OK)」「下限アンダー(NG)」といった、3つの分岐処理を並行して行いたい場合に真価を発揮します。1つの命令で3つの状態を一気に振り分けられるため、後段の回路が書きやすくなります。
- 現場の罠(注意点): 結果を出力するために「連続する3点(M0, M1, M2)」を強制的に占有します。設計者がこれを失念し、うっかりM1やM2を別の用途で使ってしまうと、エラーも出ずにデータが上書き破壊されるため注意が必要です。
単一条件の判定に特化した「接点比較命令」
「水位が設定値を超えたらポンプを動かす」といった、単一の条件だけで出力を行いたい場合は、迷わずこちらの「接点比較命令」を使用します。
(D100が500以上の時だけ、Y10をONする)
[<= K500 D100] ────────── ( Y10 )

通常のA接点と全く同じ感覚で回路の中に直列に組み込めるため、、「D100が500以上の時、Y10をONする」という設計者の意図が1行で完璧に伝わります。無駄なデバイスを消費するリスクもなく、直感的に読めるため現場でも多用される命令です。
目的に合わせて、この2つの命令を使い分けるのが設計における鉄則です。
第2章:単一条件の罠「閾値のチャタリング」
「単一条件なら接点比較命令がシンプルで便利だ」と学んだ新人設計者が、現場で必ず陥る罠があります。それが、連続する数値を扱う際に発生する「閾値(しきいち)付近でのチャタリング」です。
具体例として、水槽の「給水ポンプ」を制御する場面を想像してください。 水位センサーからの現在値(D100)を監視し、「水位が50.0%(K500)以下になったら、給水ポンプ(Y10)をONする」というプログラムを組みます。
[<= D100 K500] ── ( Y10 給水ポンプ )

デジタル接点(ON/OFF)の思考に慣れていると、無意識にこう組んでしまいがちですが、これが現場では命取りになります。
水槽の水面は、給水や排水の影響で常に波立っています。そのため、センサーが読み取るアナログ値は常に「揺らぎ」を持っています。もし水面が波打ち、水位が49.9%と50.0%の間を行き来したらどうなるでしょうか。
大電流を必要とする給水ポンプの巨大なモーターが、1秒間に何度も激しく起動と停止(チャタリング)を繰り返します。モーターは突入電流で過熱し、マグネットスイッチの接点が焼き焦げ、最悪の場合は設備が物理的に破損します。SSR(ソリッドステートリレー)で逃げることができるヒーター等とは異なり、モーター制御においてこの設計ミスは致命傷となります。
デジタル(ON/OFF)の世界とは違う、「数値の揺らぎ」をプログラム側で吸収する設計が必要なのです。
💡 実務の知恵:電極式レベルスイッチという選択肢
実は、このような水槽の制御においてチャタリングを防ぐ非常にシンプルで確実な方法があります。それはアナログセンサーを使わず、「電極式レベルスイッチ」を使うことです。 「短い電極まで水が来たら停止」「長い電極から水が離れたら起動」というように、物理的な長さの段差を利用して確実にON/OFFを切り替えることができます。しかし、「タッチパネルから目標水位を自由に変更したい(段取り替え)」といった要求がある場合は、物理スイッチではなくアナログセンサーとPLCプログラムの出番となります。
この問題は「水位」だけに限らない
上記の水槽はあくまで一例です。この「数値の揺らぎによるチャタリング」は、ヒーターの温度制御、コンプレッサーの圧力制御、フィルムの張力(テンション)制御など、連続して変化する数値を扱うあらゆる場面で全く同じように発生します。
次章で解説する解決策は、これらすべてに応用できる普遍的な技術です。
第3章:計算(四則演算)を組み合わせて不感帯を作る
この致命的なチャタリングを防ぎ、かつタッチパネルから柔軟に設定変更できるようにするためのテクニックが、プログラムによる「ヒステリシス(不感帯)」の構築です。
考え方は非常にシンプルです。 「ONにする水位」と「OFFにする水位」にあえて差(ズレ)を設けます。
- 50.0% 以下に下がったら、給水ポンプを ON する。
- 55.0% 以上に上がったら、給水ポンプを OFF する。
このように設定すれば、水位が50.0%付近で激しく波打ったとしても、一度ONになったポンプは55.0%に達するまで止まることはありません。
出力がバタつくことは物理的に不可能になります。
四則演算(+、-)で閾値を自動計算させる
実務では、この「上限」と「下限」を固定の数値(定数)で書き込むようなことはしません。
今回のもう一つの主役である「四則演算命令」を使い、PLCに自動計算させます。
タッチパネルから以下の2つの数値を入力できるように設計します。
- D200: 目標水位(例:550 = 55.0%)
- D202: ヒステリシス幅(例:50 = 5.0%)
そして、引き算(-)を使って「ONにするための下限閾値」を作り出します。
(目標値 - ヒステリシス幅 = 下限閾値)
[ - D200 D202 D210 ] // D210に500(50.0%)が自動で格納される

これで、目標水位(D200:55.0%)と、下限閾値(D210:50.0%)という2つの基準値が完成しました。
第4章:比較と計算の融合「ヒステリシスの型」
最後のステップです。 第3章で計算した2つの閾値(D200、D210)と、第1章で学んだ「接点比較命令」を組み合わせて、自己保持回路を組み上げます。
(下限を下回ったら給水開始、目標値以上になるまで自己保持キープ)
┌─[<= D100 D210]─┬─[< D100 D200]──( Y10 給水ポンプ )
│ │
└─[ Y10 a接点 ]──┘

これが、アナログ値のチャタリングを完全に封殺し、設備を物理的破損から守る「ヒステリシス制御の実務の型」です。
現在水位(D100)が下限(D210:50.0%)以下になれば自己保持がかかって給水が始まり、目標値(D200:55.0%)に達した瞬間にb接点条件(<)が外れて自己保持が切れます。
数値の「計算」と「比較」を組み合わせる。 たったこれだけのことで、どんなに波立ちの激しい水槽でも、設備を壊すことなく安全かつ確実に制御できるのです。
まとめ〜アナログの揺らぎをプログラムで支配せよ〜
本記事では、数値を扱うための基本命令と、それらを組み合わせた実践的な「ヒステリシス(不感帯)制御」の作り方を解説しました。
重要なポイントを振り返ります。
- 命令の使い分け: 3分岐が必要な場合は「CMP命令」を、単一条件で出力したい場合は「接点比較命令」を選択し、無駄なデバイス消費を防ぐ。
- チャタリングの危険性: デジタル思考のままアナログ値を単一の閾値で判定すると、揺らぎによって出力がバタつき、機器の物理的破損に直結する。
- 汎用性の高い型: 四則演算で「下限」の閾値を計算し、接点比較命令による自己保持回路を組むことで、出力を完全に安定させる。
今回解説した「接点比較命令」と「四則演算」の組み合わせは、あらゆるメーカーのPLCでそのまま通用する普遍的な設計スキルです。
そして忘れてはならないのは、このヒステリシスの思考が「温度」「圧力」「流量」など、数値を扱うすべての制御に応用できるという事実です。現場で連続する数値を扱う局面に遭遇した際は、ぜひこの「ヒステリシスの型」を思い出してください。設備の寿命と安定性が驚くほど向上するはずです。
※本記事で使用している画面は、三菱電機株式会社「GX Works2」の操作画面です。
※GX Works2、MELSECは、三菱電機株式会社の登録商標です。
※本記事で紹介しているプログラムや回路図は、技術解説のためのサンプルです。実機での動作を保証するものではありません。
※実際に使用する際は、十分な検証を行った上で、安全に配慮して運用してください。