SiemensのLOGO! Soft Comfortでステートマシンを構築する方法


APDahlen Applications Engineer

この技術概要では、SiemensのLOGO! PLCを使用してステートマシンを構築する方法について説明します。この手法は、74シリーズのディスクリートデジタルロジックを用いて構築する基本的なステートマシンを想起させるものです。LOGO!のファンクションブロック言語において、整然としたレイアウトについても重点的に説明します。

この手法は、図1に示すSiemensのLOGO! 9 PLCとHoneywellの SPS-R360D-NBMS0101 を使用して実演しています。このアプリケーションでは、金庫のダイヤルをシミュレートするためにHoneywellのセンサを使用します。なお、DigiKeyの技術者が、デモ用としてこのセンサにいくつかの部品を追加しています。

LOGO! 9プロジェクトはこちらからダウンロードできます。
Initial.wnp(188.8 KB)
パスワードは「password」です。

主な要点

  • ステートビットは、LOGO!標準装備のラッチングリレー(Set/Reset)ブロックを使用して保持します。
  • 任意の時点でアクティブなのは常に1ビットだけとなるOne-Hot方式を採用しています。
  • この手法は、最大5個の離散ステートを持つ小規模なステートマシンに適しています。より大規模なステートマシンも可能ですが、プログラムの構成に細心の注意を払ったとしても、複雑さは増していきます。
  • デフォルトのLOGO!ソフトウェア構成のままで実現するため、ファンクションブロックダイアグラムを使用します。
  • LOGO!の論理シンボルは物理的な論理ゲートではなく、関数呼び出しです。コードはFPGAのようにすべてが同時に実行されるのではなく、順次実行されます。ステートマシンでグリッチの出力を防ぐため、この点を考慮する必要があります。

この記事は、DigiKey Field Guide for Industrial Automationの一部です。

分類: Program It → PLC → Siemens LOGO!
難易度: :gear: Engineer — 難易度レベルの説明
著者: Aaron Dahlen | MSEE | Senior Applications Engineer, DigiKey
最終更新日: 2026年6月10日


図1: 筆者の作業台の上にあるHoneywellのロータリセンサが、LOGO! 9 PLCと並べて示されています。

Honeywellのセンサを金庫のダイヤルとして使用する

このステートマシンは、金庫のダイヤルの暗証番号を模擬するよう設計されています。ユーザーがハードコードされた暗証番号14、75、および29に従ってダイヤルを回すと、ステートが遷移します。

このセンサは4~20mA信号を出力する一方、LOGO!は0~10V DCのアナログ入力を受け付けます。入力電圧は470Ω抵抗の両端に現れます。センサのフルスケール値は、LOGO!のアナログアンプを使って 0~100にスケーリングされます。最後に、ダイヤルの暗証番号に含まれる特定の数値を検出するためアナログ閾値判定を使用します。例えば、メモリロケーションM52は数値75を検出するために使用します。

どのようなステートマシン構成ブロックが利用可能でしょうか?

ラッチングリレーは、ステートマシン用のLOGO!の構成ブロックです。実際のハードウェアでは、ラッチングリレーは一般的に2つのコイルで構成されています。どちらのコイルが励磁されたかに応じて、その状態を物理的に保持します。図2に示す IDECの RY2KS-UDC24V は、代表的なデュアルコイルラッチングリレーです。2つのコイルに加えて、リレーのアーマチュアを所定の位置に保持する物理的な機構も確認できます。

ラッチングリレーで最も重要な要素はメモリです。ラッチングリレーには、最後にアクティブになった入力に基づいて状態を保持する1ビットのメモリロケーションを備えています。LOGO!では、ラッチングリレーは2つの状態を提供します。

  • Setをアクティブにすると、Q出力をセットします。
  • Resetをアクティブにすると、Q出力をクリアします。
  • Reset入力は、Set入力よりも優先されます。

図2: デュアルコイルラッチングリレーの写真

SiemensのLOGO!のステートマシン:ラッチングリレーを使用したOne-Hotロジック

図3は、5ステートのOne-Hotステートマシンを示しています。以前の私の学生の一人は、この構成が74シリーズロジックを使用して構築したステートマシンによく似ていると述べていました。

  • ステートは、ラッチングリレー(RSと表記)によって保持されます。
  • ANDゲート(&)は、各ラッチをセットするために使用されます。
  • ORゲート(≥1)は、各ラッチをクリアするために使用されます。
  • ゼロステートは図の最上部に示されています。これは、いずれのラッチングリレーもセットされていないときにアサートされます。

ステートビットをリセットする条件

各ラッチは、ORゲートを介してリセットされます。各ORゲートの上側の入力には、入力 I1を起点とするマスターリセットが接続されています。また、各ORゲートには、次段に続くステートからの信号も入力されます。例えば、図3では、赤色のデバッグ信号はState 2に関連付けられています。この信号が、ORゲート(B015)を介してState 1のラッチ(B014)へ送られていることに注目してください。その結果、新しいステートへ進むと古いステートがクリアされ、ステートマシンのOne-Hot性が維持されます。

次段のステートビットをセットする条件

各ラッチは、現在のステートと遷移条件を組み合わせる ANDゲートによってセットされます。B25のANDブロックがその一例です。現在、LOGO!はState 2にあります。状態遷移は、信号M52が入力されるのを待っています。

図3: グリッチのある5ステートマシンの実装

グリッチの落とし穴

注意: この実装は完全ではありません。コードは上から下、左から右へ実行されるため、2つのステートビットが同時にアクティブになる1サイクルのグリッチが発生します。これは、State 2State 3のANDをとり、その結果をラッチに入力することで確認しています。このラッチは、State 2からState 3への遷移のたびにトリガされるため、Two-Hotグリッチの発生を確認できます。

例として、現在State 2にある図3のデバッグウィンドウを考えてみます。信号M52がアサートされると、システムはState 3ビットをセットします。しかし、ここが重要な点ですが、State 2に関する演算はすでに完了しています。その結果、One-Hotのルールが破られ、このサイクルを終了する時点では、State 2State 3の両方がアサートされた状態になります。

技術的なヒント: LOGO!のファンクションブロック論理記号は、実際の論理ゲートではなく、関数呼び出しです。これは、ラダーロジックにおいて、コイルや接点が実際にはC言語の関数呼び出しのようなものであることを忘れた場合と同じ落とし穴です。

今見ているものは、あくまでも抽象化された表現であることを決して忘れないでください。内部では、マイクロコントローラがあらかじめ用意された関数を呼び出し、メモリ間の演算を実行しています。 この記事では、マイクロコントローラのプログラミングとPLCプログラミングの概念を橋渡しするコード例を示します。

グリッチのないステートマシン

要するに、状態遷移を1スキャンサイクル遅らせることで、2つのステートのグリッチを防止します。

この落とし穴の原因は、論理(コード)が上から下、左から右へ順番に実行されることによって自然に生じます。本例では、State 2をクリアするために処理をさかのぼることはできません。なぜなら、その部分のコードはすでに呼び出されているからです。その代わりに、State 2がアクティブな間はState 3を禁止することが、One-Hotのパターンを維持するための妥当な解決策となります。

1つの簡単な対策を図4に示します。分かりやすくするため、図4では図3のステートマシンをそのまま残しています。追加したのは、2つのステートが同時にアクティブになることを防ぐANDゲートだけです。これにより、状態遷移は実質的に1スキャンサイクル遅延されます。

図4: グリッチのないステートマシン

メモリロケーションの賢い使い方

ソフトウェアがデフォルトで提供するメモリロケーションを使用したいという誘惑に負けないでください。その代わりに、メモリ名を意図的に活用してください。例えば、図3の左下には5つのフラグ(Mブロック)があります。最上段のブロックには、1ビットメモリロケーションM100が割り当てられていることに注目してください。残りは連番で、M104まで割り当てられています。これらを合わせて、技術的なヒントで説明したステートマシンのOne-Hotステートを表しています。

これらのメモリ割り当ては、ラッチングリレーに保持されている値を重複して保持しているため、厳密には必要ありません。しかし、これらは、ステートマシンの残りの部分へ分岐するための、整理された左側の配線マトリクスを形成します。

技術的なヒント: ステートを表現する方法は複数あります。整数表現とOne-Hotは、どちらも産業用制御システムで一般的に使用されています。整数表現では、整数型のステート変数、一連の数値比較器、およびmove演算子を使用します。一方、One-Hot方式では、各ステートを個別のメモリロケーションに格納します。

One-Hot表現は、LOGO!ではラッチングリレーを使用することで容易に実現できます。副次的な利点として、各ステートに対応するクリーンなOne-Hot信号が存在します。これにより、次段のステート論理および出力論理が大幅に簡素化されます。例えば、各ステート専用のHMI出力を構築できます。

設計上のトレードオフとして、One-Hotステートマシンのグラフィカルな構造は扱いにくくなります。このため、図3に示すように、ステート数は約5個までに制限することを推奨します。.

:books: 産業制御システムの探求の継続

この記事がお役に立った場合は、以下の内容もご覧ください。

:world_map: DigiKeyナビゲーション

:japanese_symbol_for_beginner: 関連する基礎的な記事

著者について

Aaron Dahlen氏、元米国沿岸警備隊(USCG)少佐(LCDR)は、シーフリバーフォールズにあるDigiKeyのシニアアプリケーションエンジニアを務めています。エレクトロニクスおよび産業オートメーションに関する彼の知識と経験は、技術者およびエンジニアとして従事した27年間の軍歴と、その後10年以上にわたる教育経験を通じて培われました。

Dahlen氏は、ミネソタ州立大学マンケート校で電気工学修士号(MSEE)を取得しています。また、ABET認定を受けた電気工学プログラムで教鞭を執ったほか、電子工学技術プログラムのコーディネーターを務め、軍の技術者に対して部品レベルの修理技術を指導してきました。

現在は、ミネソタ州北部の故郷へ戻り、コンデンサ探しから始まった数十年にわたる旅を終えました。彼の物語はこちらからお読みください。




オリジナル・ソース(English)