SiemensのTIAポータルを使用したユーザー定義ファンクションブロック(UDFB)の構築


APDahlen Applications Engineer

ユーザー定義ファンクションブロックとは何でしょうか?

ユーザー定義ファンクションブロック(UDFB)は、プログラマブルロジックコントローラ(PLC)のコードをテスト可能な単一のプログラム構成ユニット(POU:Program Organization Unit)にカプセル化します。
このPOUは、プログラム内から複数回インスタンス化することも、大規模なライブラリの一部として使用することもできます。UDFBは、C言語の関数のようなものです。

この技術概要では、モータスターターを制御および監視するために設計されたSiemensのTIAポータルUDFBを紹介します。また、数値型ステートマシンの開発とトラブルシューティングを容易にするTIAポータルの機能についてもいくつか紹介します。

読者は、MOVE命令ブロックの操作までのラダーロジックをよく理解し、Siemens PLCの基本的な知識を持っていることを前提としています。また、このコードはSiemensの S7-1200 CPU 1215 FC で開発およびテストされています。

要約: UDFBはPLCプログラムに不可欠な構成要素であり、適切に構築されたUDFBは開発時間を節約します。UDFBはコードをモジュール化して堅牢にし、テスト済みのコードをライブラリとして複数のプロジェクトで再利用できる可能性を秘めています。SiemensのTIAポータルソフトウェアは、ステート名の定数(抽象化)などの高レベルプログラミング技術を使用して、UDFBベースのステートマシン開発を容易にします。

その他の記事

この技術概要は、Siemensの S7-1200 CPU 1215 FC 上で開発およびテストされたSiemens TIAポータルUDFBに関する一連の解説の規準となる記事です。その他の記事は以下のとおりです。

本記事は、DigiKeyのSiemens PLC and Automation Resource Hubの一部です。Siemensのコンポーネント、アプリケーション、プログラミングに関する技術概要は、ハブをご覧ください。

図1: モータスターターは、人間の操作を想定した時間ベースのテスト値を使用してインスタンス化されます。

技術的なヒント: UDFBはエッジセンスとレベルセンスに分類されます。エッジセンスのUDFBは立ち上がりエッジまたは立ち下がりエッジでトリガ(起動)され、レベルセンスのブロックは入力がアクティブである間アクティブになります。UDFBのタイプを特定することは、ブロックを理解し、トラブルシューティングを行うために不可欠です。

  • エッジトリガ: パルス(立ち上がりエッジか立ち下がりエッジかは設計に依存)を検出して起動し、完了するか中断されるまで動作します。

  • レベルセンス: イネーブル信号が存在する場合のみ動作します。

この記事で紹介するUDFBはレベルセンスです。モータスターターのxCoilDrive信号は、xEnable信号が存在するときにのみ動作します。

モータスターターの制御

PLCの観点から大型産業用モータスターターを制御する方法は数多くあります。出力ピンを介した単純なオープンループ制御から、各相の電流を制御およびモニタを行うネットワークベースのソリューションに至るまで、多岐にわたります。

このノートでは、モータスターターが起動したことを確認するためにフィードバックループを構成します。これは図1のUDFBを使用して行います。具体的には、xEnable信号を受信すると、UDFBのxCoilDrive出力ラインがアクティブになります。その後、モータスターターからの補助接点がUDFBのxSensor入力にフィードバックされます。

モータスターターのステート

UDFBには5つのステートが組み込まれています。各状態に関連する初歩的な故障は、モータスターターの補助接点からのフィードバックをモニタすることで検出できます。

  1. オープンステート: モータスターターは、非動作状態であり、コンタクタのコイルに電力は供給されていません。UDFB は、モータスターターが予期せずtimGlitch(図1では2秒)よりも長く閉じた場合にフォルトステートになります。これは、技術者が絶縁ドライバーを使用し、モータスターターのアーマチュアに無理やり押し込んだ場合に発生する可能性があります。

  2. クロージングステート: モータスターターのコンタクタがオープンステートから物理的にクローズドスタートに遷移しています。接点がtimClose(図1では5秒)内に閉じないと、UDFBはフォルトステートに遷移します。図1は、このクロージングステートでフォルトが発生したUDFBを示しています。

  3. クローズドステート: 接続されているモータのモータスターターが動作しています。timGlitchよりも長い期間センサ信号が一瞬失われると、UDFBはフォルトステートになります。このフォルトステートでは、モータスターターまたはフィードバックラインにつながる駆動ワイヤが緩んでいる可能性があります。
    また、過負荷が発生すると、サーマル過負荷ブロックを介してモータスターターがトリップします。

  4. オープニングステート: モータスターターのコンタクタが閉じた状態から開いた状態に遷移します。接点がtimClose(5秒)期間内に開かないと、プライマリ接点または中継リレーの接点が溶着した可能性があるため、フォルトステートに切り替わります。

  5. フォルトステート: モータスターターはフォルトステートになっています。イネーブル信号を無効にしてリセットボタンを押すと解除されます。

ラダーロジックのステートエンコーディング

ラダーロジックには、ラッチ、セット/リセットコイル、ステートの数値表現など、ステートをエンコードするさまざまな方法があります。この5つのステートの例は、3つの方法のどれを使っても構築できます。しかし、私見ですが、図2および図3に示すような数値法が最も理解しやすいと思います。これは、私が組み込みプログラミングの経験があり、C言語のswitch-case文を使ってツリー構造で状態をエンコードすることを好むためかもしれません。

ラダーロジックにおける列挙データ型

数値だけを頼りにしていると、数値の状態を見失いがちです。例えば、クロージングステートを10進数の「1」と呼んでも、本質的な意味はありません。しかし、抽象化を加えれば、数値を意味のあるキーワードに置き換えることができます。
SiemensのTIAポータルは、図2で強調表示されているように、定数を使用した便利な列挙方法を提供しています。ここでは、各ステートが意味のある名前で表されていることがわかります。例えば、uiStClosingを値1にマッピングしています。この例では、符号なし整数(ui)と状態(st)を接頭辞とするハンガリアン記法を使用しています

図2: UDFBの状態に使用されるステートエンコーディング

これらの列挙型のステートの威力は、図3に示されているように、クロージングステー トのラダーロジックのネットワークで示されます。このネットワークは、uiState変数がuiStClosing定数と等しいかどうかを判定する比較演算子から始まります。つまり、クロージングステートであるかどうかです。クロージングステートであると仮定すると、以下のステートへのジャンプを含め、3つの状態遷移が存在します。

  • クローズドステート: モータスターターがオープンステートからクローズドステートへ遷移する際の通常の流れです。

  • フォルトステート: これは、モータスター ターからのフィードバックがtimClose(5秒)以内に現れないときに発生します。

  • オープニングステート: この遷移は、オペレーターが急に考えを変え、コンタクタが完全にクローズドステートになる前に、コンタクタをオープニングステートにしようとしたときに発生します。

このロジックには、「failed to close」をstrFaultCondition文字配列にコピーする文字列転送関数(S_MOVE)が含まれています。これにより、技術者はUDFBのフォルトステートに至る条件を明確に説明できます。この情報は、 フォルト文字列を統合するために追加のコ ー ドを使用すると、 より規模の大きいHMIアラームシステムに使用できます。

図3: 最初の3つのブランチに次のロジック、最後の分岐に出力ロジックを持つUDFBのクロージングステートのネットワーク

技術的なヒント: 図3には、直列接続されたセットコイルとリセットコイルがいくつか含まれています。これは、出力ロジックを各ネットワークに組み込むための便利でコンパクトな方法を提供します。直列接続されたコイルとセット/リセットコイルの配置に関する追加の考慮事項については、このTechForumの投稿を参照してください。この記事にあるように、多くの人は直列接続コイルやセット/リセットコイルに強い反対意見を持っています。

ステートマシンの対称性と設計概要

数値ベースのステートマシンは驚くほどコンパクトで、各ステートが他のステートに密接に関連する対称的なものです。各ステートは図3(クロージングステート)に忠実に従い、列挙による明瞭さに重点を置いて、他のステートへの明確な条件ジャンプがあります。
図3を追うことができれば、他の状態も簡単に追うことができると確信しています。残りの状態についてのさらなる探求は、宿題として残されています。また、このモータコントローラのPDFをダウンロードすることをお勧めします。

UDFB.pdf(88.1 KB)

フォルトステートのロジック

ここで、図4に示すフォルトステートについて簡単に確認します。前回と同様に、等値性、つまりフォルトステートにあるかどうかのテストから始めます。その後、2つのブランチが続きます。

  • モータスターターがOFF(無効)の状態でリセットボタンを押すと、オープン(アイドル)ステートにジャンプします。

  • 最後のブランチは、直列接続されたセットコイルとリセットコイルを使用してUDFBのブロックを更新します。

システムをリセットする前に、モータスターターをオフにする必要があります。これにより、オペレーターまたは技術者が故意にシステムをオフにする必要があるため、予期しないモータ始動を防ぐことができます。

図4: フォルトステートのロジック

おわりに

ステートマシンは、数値型ステート変数を使って構築することができます。これにより、UDFBのカプセル化に最適なコンパクトなコードが生成されます。この例では、各ネットワークが次の状態遷移と各ステートの出力ロジックをカプセル化しています。
紹介したコードはまだ比較的単純ですが、ラッチやセット/リセットコイルなどの代替手段と比較すると、この方法は優れた拡張性を持っています。例えば、反転モータスターターはサイズが2倍になります。しかし、各ステートのネットワークを追うのは簡単です。

皆様のご意見をお聞かせください。お好きなプログラミング方法はありますか?コメント欄にご意見をお寄せください。また、この投稿から何かを学んだ方は「いいね!」をお願いします。

ご健闘をお祈りします。

APDahlen

この著者の関連記事

この記事を楽しんでいただけたのであれば、以下の関連記事も役立つでしょう。

著者について

Aaron Dahlen氏、LCDR USCG(退役)は、DigiKeyでアプリケーションエンジニアを務めています。彼は、技術者およびエンジニアとしての27年間の軍役を通じて構築されたユニークなエレクトロニクスおよびオートメーションのベースを持っており、これは12年間教壇に立ったことによってさらに強化されました(経験と知識の融合)。ミネソタ州立大学Mankato校でMSEEの学位を取得したDahlen氏は、ABET認定EEプログラムで教鞭をとり、EETプログラムのプログラムコーディネーターを務め、軍の電子技術者にコンポーネントレベルの修理を教えてきました。彼はミネソタ州北部の自宅に戻り、このような記事のリサーチや執筆を楽しんでいます。




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