# 防御的なPLCプログラミングによる予期せぬ機器の起動の防止

**URL:** <https://forum.digikey.com/t/plc/39314>\
**Category:** 電子部品技術の深層\
**Created:** [March 2, 2024, 12:29pm UTC](https://forum.digikey.com/t/plc/39314 "2024-03-02T12:29:18Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tsuneharu\_Fuji](https://avatars.discourse-cdn.com/v4/letter/t/54ee81/32.png) [@Tsuneharu\_Fuji](https://forum.digikey.com/u/Tsuneharu_Fuji)\
**Post date:** [March 2, 2024, 12:29pm UTC](https://forum.digikey.com/t/plc/39314/1 "2024-03-02T12:29:18Z")

</div>

[**APDahlen**](https://forum.digikey.com/u/APDahlen) Applications Engineer 

[産業用制御とオートメーションのインデックスに戻る](https://forum.digikey.com/t/topic/38527)

損害は、産業環境における最大の脅威の1つです。プログラマブルロジックコントローラ（PLC：Programmable Logic Controller）をプログラミングする際には、プログラムに安全性を組み込むことで事故を防止する対策を講じる必要があります。この記事では、図1に示す[Crouzet-Soft](https://www.crouzet.com/products/automation-controllers/software/)のファンクションブロックダイアグラム（FBD：Function Block Diagram）コードを使用して、予期しないシステムの起動を防止する方法を簡単に紹介します。使用するPLCは、図2の[PLC trainer](https://forum.digikey.com/t/diy-3947/39236)に示した[Millenium Slim](https://www.digikey.jp/ja/products/detail/crouzet/88983902/15646787)とそれをサポートする機器です。

このセットアップでは、図2に示すように、3つのコントロールを備えた機器を設計すると仮定します。以下のとおりです。

- マスターON/OFFコントローラであるセレクタスイッチ

- マシンサイクルを停止するノーマリクローズ（NC）接点のモーメンタリプッシュボタン（赤）

- マシンサイクルの開始を知らせるノーリルオープン（NO）接点のモーメンタリプッシュボタン（緑）

プログラマーとして、ユーザーがこのシステムをどのように操作するかを考慮しなければなりません。また、せっかちなユーザーや停電から生じる異常動作も考慮しなければなりません。例えば、以下の場合に何が起こるかを考えてみましょう。

- セレクタスイッチを ON にしたまま、サイクルスタートスイッチ（緑）を押した場合

- ユーザーがサイクルスタートスイッチ（緑）を物理的に詰まらせた場合

- マシンの電源スイッチがONのまま主電源が落ち、そののち復旧した場合

- サイクルストップスイッチ（赤）とサイクルスタートスイッチ（緑）を同時に押し続けた場合

- サイクルスタートスイッチ（緑）を物理的に詰まらせた状態で、電源スイッチがONのまま主電源が落ち、そののち復旧した場合

少し想像力を働かせれば、これらの状況のそれぞれが、不注意にマシンサイクルを始動させたり、瞬間的な不具合を引き起こしたりする可能性があることが分かります。このような予期せぬ始動は、機器に損傷を与え、オペレーターやサービス要員に危害を及ぼす可能性があります。

どのような場合でも、このような事態を防ぐために、防御的なプログラムを作成しなければなりません。

## FBDのテストベッド（テスト環境）

図1のFBDを使って、問題と解決策を説明します。このコードの中心はSET/RESTブロックです。このブロックは、セレクタスイッチ（I1）がオンになり、緑のサイクルボタン（I3）が押されるとセットされます。赤のリセットボタン（I2）が押されるか、セレクタスイッチ（I1）がオフになるとリセットされます。厳密には必要ではありませんが、マシンがアクティブの時、緑のサイクルボタン（I3）はANDゲートによって無効化されます。

## 複雑なシステムの相互作用を説明するためのエラーのシミュレーション

予期せぬ起動の問題に着目してもらうために、SET/RESETブロックをわざと誤設定にしています。これは、リセットラインよりもセットラインが優先されるように設定されています。また、電源遮断時のデータセーブも設定されています。これは、より複雑なステートマシンを構築する場合など、どのような問題が起こり得るかを説明するために行ったものです。

その結果、緑の「GO」ボタンが赤の「STOP」ボタンより優先されるという逆さまの優先順位になります。おそらくもっと危険なのは、電源遮断時のデータセーブの設定です。電源遮断後に電源が回復すると、システムは即座に再起動します。

## 立ち上がりエッジパルス

最初の防御策は、モーメンタリのスタートプッシュボタンを本当のモーメンタリにすることです。これは、プッシュボタン信号を立ち上がりエッジ検出回路経由で送ることで実現できます。Crouzet-SoftのFBD環境では、これは図1のI3ラインにつながれているBW（立ち上がりエッジ検出）タイプのファンクションブロック（TMR BW）を使用することで実現できます。この簡単な操作で予期せぬ起動を防ぐことができます。この変更により、ノーマリオープン接点の緑のサイクルスタートプッシュボタンは、次のサイクルが始まる前にリラックス（オフ）状態にならなければならなくなります。別の言い方をすれば、オペレーターや保守技術者がサイクルスタートボタンを物理的に詰まらせる必要はありません。

ある時点で、緑と赤のボタンを同時に作動させるとシステムが誤動作するため、SET/RESETブロックに戻って再設定する必要があります。緑のスタートボタン（サイクルスイッチ）は、立ち上がりエッジパルスにより一時的にシステムをセットしますが、すぐに赤のストップボタン（リセットスイッチ）によってリセットされます。この短い時間は、PLC出力がアクティブになるのに十分な長さです。これは、接続されたモータを少し動かします。

 ![Figure 1: Function Block Diagram converting the momentary N.O. switch press signal to a pulse.](https://global.discourse-cdn.com/digikey/original/3X/4/c/4cf9e15b6f416889217717f07ba4b931af172a09.png)

**図1：** モーメンタリノーマリオープンスイッチの押下信号をパルスに変換するFBD（Function Block Diagram）

> **技術的なヒント：** 図1では、3入力のORゲートの代わりに4入力のORゲートが使われています。余分な入力は、入力の1つから同じ信号を受け取ります。ブール代数の結果はF = A + A + B + Cであり、冪等性により(A + A) = Aなので、F = A + B + Cと同じです。

 ![Figure 2: Picture of the equipment setup with a ON selector switch and momentary switches as the red reset and green machine cycle start.](https://global.discourse-cdn.com/digikey/original/3X/1/4/14c4d49c61606262578460a9cc4860ae10848d46.jpeg)

**図2：** ONセレクタスイッチと、モーメンタリスイッチ（赤のリセットボタンと緑のマシンサイクルスタートボタン）を備えた機器のセットアップ写真

> **技術的なヒント：** 赤いリセット（停止）ボタンは物理的なノーマリクローズ接点を備えています。原則として、マシンを停止させるものはノーマリクローズ接点を使用し、マシンを始動させるものはノーマリオープン接点を使用するべきです。

## ファーストスキャンは機器の安全性にとって極めて重要

PLCはプログラムスキャンの繰り返しで動作することを思い出してください。典型的なPLCの場合、ループは以下のようになります。

- ハウスキーピング（システムの維持管理）の実行を行います。

- ネジ端子入力の内容をメモリに転送します。

- ユーザーのプログラムに基づいて、メモリからメモリへの転送処理を実行します。

- メモリの内容をネジ端子出力に出力します。

覚えておくべき重要なことは、ユーザーのプログラムはメモリ間のインターフェースとして動作するということです。つまり、PLCの初期電源投入時に何が起こるかを考えておく必要があります。SET/RESETブロックが、電源障害により意図的に誤って設定されたことを思い出してください。これは、セレクタスイッチが「運転」の位置（1）にあれば、電源投入時にマシンが直ちに再起動することを示唆しています。

図1に示すファーストスキャン（FSCAN：First Scan）のマクロで解決策が提案され、図3に展開されています。これはTONタイマとXORゲートで構成されています。ファーストプログラムスキャンでは、タイマがカウントを開始します。XORゲートは、固定の論理1とタイマ出力からの論理0を認識します。その結果、XORゲートは論理1になります。2回目のプログラムスキャンでは、タイマの出力が論理1になり、XORが論理0を出力します。その結果、ファーストプログラムスキャンで文字通りパルスが出力されます。このマクロを使用して、PLC内のすべてのモジュールを初期化できます。

 ![Figure 3: Function Block Diagram implementation of the first-scan macro.](https://global.discourse-cdn.com/digikey/original/3X/4/f/4f6e48f955a2b0207b3f76c11c2961d7e6fa485a.png)

**図3：** ファーストスキャン（FSCAN）マクロを実行するファンクションブロックダイアグラム（FBD）

図1に戻ると、ファーストスキャン（FSCAN）マクロの出力は赤いプッシュボタンとセレクタスイッチと、OR接続されていることが分かります。その結果、ファーストスキャンはSET/RESETブロックのリセットに使用さ れます。

> **技術的なヒント：** マクロ操作はコードのカプセル化に使われます。これはトップレベルのコードを単純化するので非常に有効です。また、コードを再利用することも出来ます。その一方で、古いトラブルシューティングの格言に、すべてのプログラミングの問題は、特に大規模で文書化が不十分な場合、マクロ内に含まれている、というものがあります。常に分かりやすいプログラミングを心がけましょう。

## まとめ

この記事は、機器の予期せぬ起動を防ぐための防御的プログラミングの簡単な紹介です。考慮すべき多くの追加事項があるため、非常に不完全であることに注意してください。例えば、マシンによる材料のワークフローと同様にステートマシンはかなりの複雑さを追加します。一例として、オペレーターがライトカーテンを壊したときに、複合機がどのように反応すべきかを考えてみましょう。1つの解決策は、オペレーターがマシンの筐体の内側からボタンを押すことができないように、マシンの筐体の外側に2つのボタンの安全スタートボタンを追加することです。

そうなると、安全度水準（SIL：Safety Integrity Level）の概念と、冗長かつ独立した安全装置の適用について考えることになりますが、この話題はまた別の機会に。

予期せぬ事態に備えるため、防御的なプログラミングを学び続けてください。

ご健闘をお祈りします。

APDahlen

[産業用制御とオートメーションのインデックスに戻る](https://forum.digikey.com/t/topic/38527)

 

* * *
 [**APDahlen**](https://forum.digikey.com/u/APDahlen) Applications Engineer 

訂正します。

Crouzet-Softの環境には、前回の記事で説明していますように「ファーストスキャン」パルスが含まれています。これはPROGタブのStatus関数内にあります。

このブロックには「Cold init」と「Warm init」があります。詳細はCrouzetの資料を参照してください。ヘルプメニューを見るのが一番です。

r/

APD

 ![Picture of the Crouzet STATUS block.](https://global.discourse-cdn.com/digikey/original/3X/c/3/c33c028a1090b8f90cc1a442215cb6d24bbd8f02.png)

* * *
 [**APDahlen**](https://forum.digikey.com/u/APDahlen) Applications Engineer 

追記します。

改良されたマクロベースのソリューションは以下のとおりです。

> [@CrouzetのPLC用パワーオンセーフティマクロ](https://forum.digikey.com/t/crouzet-plc-3963/39115):
>
> [APDahlen](https://forum.digikey.com/u/APDahlen) Applications Engineer [産業用制御とオートメーションのインデックスに戻る](https://forum.digikey.com/t/topic/38527) プログラマブルロジックコントローラ（PLC：Programmable Logic Controller）のプログラマーは、コーナーケースに注意を払わなければなりません。マシンを機能させるだけでは決して十分ではありません。むしろ、予期せぬ出来事に対してシステムがどのように反応するかを考えなければなりません。そのような出来事の1つが、最初に電源が投入されたときのマシンの即時動作です。 この記事では、物理的なオンとオフのスイッチを備えた一群のマシンに焦点をあてます。この物理的なスイッチは、マシンを直接起動させる場合もあれば、後続のマシン動作のマスターイネーブル信号として機能する場合もあります。いずれの場合でも、電源が遮断中にスイッチがONの位置にあるとき、マシンがどのように応答するかを明確に定義する必要があります。この記事では、予期しない電源オンの状況は、避けるべき危険であると仮定します。 ここでは、[Crouzet-Softソフトウェア](https://www.crouzet.com/products/automation-controllers/software/)を用い…

[オリジナル・ソース（English）](https://forum.digikey.com/t/prevent-unexpected-equipment-start-up-with-defensive-plc-programming/37802/2)
