こちらはBerghof MC-PIの新しいシリーズで、安全PLC SC-1000を使用し様々なデバイスと検証し記事を展開します。第3話ではCodesys Safety FB SF_EmergencyStopを利用し、非常停止ボタンを制御します。
さ、FAを楽しもう。
Reference Link
B-Nimis SC-I/O S-DI4 S-DO2
こちらは今回記事で非常停止と接続するB-Nimis SC-I/O S-DI4 S-DO2モジュールです。
安全な状態
安全な状態には2種類あります:
- 最初のものは機能的なもので、機械のアプリケーション、操作、ソフトウェアに依存し、システムには欠陥がないこと。
- 2つ目はフェイルセーフ状態であり、監視対象コンポーネントのいずれかに故障やエラーが発生した場合に適用されます。
Safe Functional State
安全なプロセスマップがすべての入力を「NULL」であることを示し、出力がこの「NUL」状態を反映するとき、システムは安全な機能状態にある。データフレームは、プロセスマップの “null “によって、再びこの状態を反映する。
Fail-Safe State – External Fault
外部故障(短絡など)の場合、全ての出力は非通電(出力は “null”)になり、入力は安全制御ユニットに “null “を返します。ですがFSoE 通信は停止せず、フェイルセーフ状態とは非通電状態のことです。さらに、 安全 PLC はこの状態をリセットすることができます。
Fail-Safe State – Internal Fault
内部モジュール・フォルトの場合、すべての出力は非通電(出力「NULL」)になります。FSoE 通信と入力情報の転送の両方が停止し、フェールセーフ状態は非通電状態です。この状態から回復するには、電源電圧をオフにしてリセットする必要がある。これには、初期化段階の一部としての完全な自己テストが含まれる。
応答時間
安全システムにおいて、総応答時間は以下の別々の時間で構成される:
- センサーによる信号処理
- B-Nimis SC-I/O S-DI4 S-DO2セーフティモジュールでの信号処理
- B-Nimis SC-I/O S-DI4 S-DO2セーフティモジュールとセーフティPLC間のEtherCATバスでの入力データ転送時間
- セーフティPLCプログラム実行時間
- セーフティPLCとB-Nimis SC-I/O S-DI4 S-DO2セーフティモジュール間のEtherCATバスでの出力データ転送時間
- B-Nimis SC-I/O S-DI4 S-DO2セーフティモジュールでの信号処理
- アクチュエータによる信号処理
安全応答時間を計算するには、フィールドバスのランタイムと安全 PLC のサイクルタイムを考慮してください。B-Nimis SC-I/O S-DI4 S-DO2セーフティモジュールは、一般的に最大5msのセーフティ応答時間を達成しています。この時間により、入出力信号が確実に変化し、安全状態が達成されます。
そして設定可能な入力フィルタ(0.3 ms から 1.5 ms の間で設定可能)は IO モジュールの最大応答時間に影響します。
デジタル入力の安全応答時間は、入力信号が変化してからEtherCATバス上でFSoEフレームが使用可能になるまでの最大時間として定義されます。 デジタル出力の安全応答時間はEtherCATモジュールがFSoEフレームを受信した後、デジタル出力の信号が変化するまでの最大時間で定義されます。
たとえ故障が発生しても、安全な応答時間が終わる前にモジュールは安全な状態になる。
以下の障害ソースは、安全状態への変化を引き起こす:
- モジュール入力で検出されたフォルト
- モジュール出力で検出されたフォルト
- モジュール内部フォルト(自己診断)
注意するのは安全機能は、50msの応答時間を必要とします! 人身事故や物的損害の発生を防止してください。
Spring-assisted Combi Plug X1
こちらはB-Nimis SC-I/O S-DI4 S-DO2のConnectorです。
こちらは各PINの配置意味です。
配線例
Berghof B-Nimis SC-I/O S-DI4 S-DO2モジュールは、産業オートメーションに機能安全を提供し、機械指令2006/42/ECに準拠した人間と機械の保護を目的としています。そのため、このモジュールへのさまざまな安全関連センサーの接続をサポートしています:
- エマージェンシーストップスイッチなどのシングルチャンネルおよびツインチャンネル接点式センサー
- ライトグリッドなどのシングルおよびツインチャンネルOSSD信号を持つセンサー
- セレクタスイッチ、セーフティマット、コネクティングブロック
また、許容最大設置負荷を超えない限り、抵抗負荷および誘導負荷を出力で動作させることができます。

I/O Supply
安全出力と関連するテストパルス出力への I/O 供給は、端子 L+ と L- に接続されている。 電源電圧は DC24 V で、監視されています。
供給ケーブルは、最大で短絡および過負荷トリガーに対する外部保護を備えていなければならない。 10 A.B-Nimis SC-I/O S-DI4 S-DO2モジュールは、EN 50178 / EN 60950-1に準拠したPELV/SELV対応のDC24 V電源ユニットからのみ供給可能です。 これはシステム電源とI/O電源の両方に適用されます。
LED
SDI4 SDO2本体にはLEDがあり、モジュールの状態を確認できます。
- “EtherCAT Run” LED: EtherCAT通信の状態
- オフ 初期化中、データ交換なし
- オフ/緑、1:1 Pre-Op 動作前、データ交換なし
- オフ/緑、5:1 Safe-Op 安全動作、入力読取可能
- 緑点灯、Op 運用中、無制限のデータ交換
- “Safe Status” (Duo-LED): 安全機能に関するモジュールの状態
- 緑点灯、OKでモジュールは機能安全状態にある
- 赤点灯、エラー モジュールがフェールセーフ状態
- “Power” LED: モジュールへの電源供給状態
- オフ – モジュールに電源が供給されていない
- 緑点灯、OKでモジュールに電源供給可能
2チャンネル接触式センサー
2チャンネル接触型センサーは、2チャンネルセンサーのテストパルス出力に異なる入力を接続することができる。 安全制御ユニットのソフトウェアモジュールは、入力信号の必要な分析を提供します。このソフトウェアは、どの安全入力も相互接続することができる。 配線は、すべての入力信号がテストパルス出力に割り当てられていることを考慮する必要があります。 パラメータ設定を使用して、使用するセーフ入力を有効にする必要があります。
Codesys Safety
アプリケーションのピン留め
アプリケーションの現在のステータスは変更されていないことを示す機能になります。そのピン留めは機能、このバージョンの名前の割り当てと組み合わされます。
検証のための準備
開発者は、セーフティアプリケーションの検証のための準備措置を講じなければなりません。ここで重要な点は、検証の対象となるセーフティ・アプリケーションのバージョンを定義し、検証、妥当性確認、およびその後の受け入れに、正確にこのバージョンのセーフティ・アプリケーションのみが使用されるようにすることです。CODESYS Safetyは、特にこのためにピン機能を提供します。
Pinningとは?
ピン留めとは、安全アプリケーションの特定のバージョンと関連する オブジェクトを識別する、安全アプリケーションの現在のバージョンへの参照ポイントが設定されることを意味します。プロジェクト内のアプリケーション、エディタ内のオブジェクト、セーフティコントローラ上のブートアプリケーションの特定のバージョンを識別することができます。さらに、ベリファイアはピンに基づいて、アプリケーションの構造、オブジェクトの内容、参照されるライブラリファンクションブロックの変更をいつでも認識することができます。
ピン留めするには?
アプリケーションをPIN操作するには、Safety Appをクリックします。
現在のプロジェクト状態を確認できます。
画面の右下にあるPin projectをクリックしプロジェクトをPinできます。
Pin名を入力し、OKで進みます。
Done!プロジェクトがPinできました。
プロジェクトがPinされたときのPin名・CRC・最後の変更時間にも表示されます。
そしてアプリケーションの各ObjectのとなりにもPINアイコンが付きました。
一般入力パラメータ
Codesys Safetyのプログラミングルールは、PLCopen の「安全関連ファンクションブロックの一般ルール」に対応しています。PLCopen 準拠のファンクションブロックに適用されます。
パラメータ名 | データ・タイプ | 説明 |
Activate | BOOL | このパラメータは、関連する安全装置の状態(アクティブまたは非アクティブ)を表す変数にリンクできます。これにより、デバイスが非アクティブになったときに無関係な診断データが生成されないことが保証されます。 |
S_StartReset | SAFEBOOL | S-PLC 起動時(warm もしくはcold)に POU の自動起動を有効にする。FALSE(=初期値):リセット入力で手動起動。TRUE: 自動スタート |
S_AutoReset | SAFEBOOL | POUの自動再スタートの起動FALSE: 入力リセットによる手動スタート。TRUE: 自動再起動 |
Reset | BOOL | FBをリセットする |
S_StartReset
この自動起動は、S-PLC の起動時にハザードが発生しないことが保証されている場合のみ起動する。 従って、ファンクションブロックの「自動起動」機能を使用する場合は、予期しない(意図しない)起動が発生しないように、他のシステムまたはアプリケーションの対策を実施する必要がある。
注意するのは、入力が(FALSEではなく)変数にリンクされている場合は、その変数に対して追加の検証手段を定義する必要があります。
S_AutoReset
S_AutoReset を使うと、安全入力(非常停止など)の条件が復旧したときに、人の手によるリセット操作なしで自動的に出力が再許可されるようになります。また、意図しない機械の再始動に注意してください。非常停止ボタンが解除されたあと、予期せぬ機械の再始動が起こる可能性があります。そのため、S_AutoReset を 有効にする場合は、次の条件がすべて満たされている必要があります:
- 作業者が機械の危険エリアにいないことが確認されている
- 機械が安全な状態にあることが確認されている
- 他のインターロック(ドア、ライトカーテンなど)が正常である
一般出力パラメータ
こちらは一般的なSafety FBの共通出力パラメータです。
パラメータ名 | データ・タイプ | 説明 |
Ready | BOOL | TRUE: POU がアクティブで、出力結果が有効であることを示す FALSE: POU はアクティブではなく、プログラムは実行されません。 |
S_StartReset | SAFEBOOL | S-PLC 起動時(warm もしくはcold)に POU の自動起動を有効にする。FALSE(=初期値):リセット入力で手動起動。TRUE: 自動スタート |
Error | BOOL | TRUE: エラーが発生し、POU がエラー状態にあることを示す。 該当するエラー状態は DiagCode 出力で示される。FALSE: エラーは発生しておらず、POU は別の状態にある。 これも DiagCode 出力で示される。 |
DiagCode | WORD | FBの診断コード |
SF_EmergencyStop
SF_EmergencyStopは緊急停止の評価に使用するFBです。このファンクション・ブロックは、非常停止ボタンを監視するための安全指向のファンクション・ブロックです。 SF_EmergencyStop は、非常停止機能(停止カテゴリ 0)、または周辺機器の追加サポートにより非常停止機能(停止カテゴリ 1 または 2)として使用できます。
VAR_INPUT
パラメータ名 | データ・タイプ | 説明 |
Activate | BOOL | 先ほど説明した一般入力パラメータ |
S_EStopIn | SAFEBOOL | 安全FBを要求する入力False:安全の対応を要求(非常停止ボタンが作動するなど)True:安全の対応が要求されていない(緊急停止ボタンが作動していないなど) |
S_StartReset | SAFEBOOL | 先ほど説明した一般入力パラメータ |
S_AutoReset | SAFEBOOL | 先ほど説明した一般入力パラメータ |
Reset | BOOL | 先ほど説明した一般入力パラメータ |
VAR_OUTPUT
パラメータ名 | データ・タイプ | 説明 |
Ready | BOOL | 先ほど説明した一般出力パラメータ |
S_EStopOut | SAFEBOOL | 安全対応のためのアウトプットFALSE: 安全出力無効、安全の応答要求(例えば、非常停止ボタンが作動している、リセットが必要、または内部エラーが存在する)TRUE: 安全出力がアクティブで安全の応答の要求はない(例えば、非常停止ボタンが作動していない、内部エラーがアクティブでない)。 |
Error | BOOL | 先ほど説明した一般出力パラメータ |
DiagCode | WORD | 先ほど説明した一般出力パラメータ |
ステータス図
こちらはSF_EmergencyStopのステータス図になります。
.
Implementation
それでは実際のプログラムを構築します。
Wiring
こちらは今回の記事の配線例です。

Configure Parameters
「EtherCAT_Master」以下には、I/Oデバイスや安全デバイスを含むスレーブ構成が組み込まれています。
- onboard_Buskoppler:オンボードのBusカプラデバイス。
- E_I_O_RX02_ENC_C_PIO_B_8:8点デジタルI/Oと1点エンコーダ入力付きモジュール。
- Nimis_SCC_1000:FSoE対応の安全コントローラまたはリモートI/Oデバイス。
Parameters “Used Inputs” and “External Inputs”
これらのパラメータを使用して、B-Nimis SC-I/O S-DI4 S-DO2 セーフティモジュールの入力を有効にし、入力機能を選択します。 パラメータ “External Inputs “を使用して、各入力にテストパルスを供給するモ ジュールのテストパルス出力を無効にします。 この設定は、独自のテストパルスを生成するセンサ(一部のライトバリアなど)に使用します。
Input Parameters Used
こちらはCODESYSでFSoEスレーブ(安全I/Oデバイス)のパラメータ設定を行っている場面です。ここで安全入力や安全出力の使用状況、テストパルス条件などの設定を細かく調整できます。
「Input 0,1 used」など複数の選択肢が表示されています。これはFSoEスレーブが持つ複数の安全入力チャネルをどのように使用するかを定義する項目です。
- No Inputs used:安全入力を使用しない(未接続時や設定しない場合)
- Input 0 used:入力0のみ使用
- Input 0,1 used:入力0と1を使用
- Input 0,1,2,3 used:4点全ての入力を使用
この設定に応じて、CODESYSのSafety Applicationで使用できる安全入力が変わります。
Done!現在は入力0と1を使用のパラメータに設定しました。
Test pulse duration input 0
デジタルテストパルス出力はテストパルス毎に設定された時間だけ遮断されます。 このようにして、B-Nimis SC-I/O S-DI4 S-DO2セーフティモジュールは、デジタル入力が値ゼロを取ることができるか、また信号ライン上に外部電圧への短絡がないかをチェックします。
Test frequency input 0
入力0でのテストパルス周波数、”0″=テストパルスなしです。
Safety Program
次はSafetyプログラムを作成します。
Insert Network
CODESYSでネットワークを挿入します。
新しいネットワークが追加されました。
Insert FB
この画面は、FSoEマスター(FSoEMaster)をネットワークに配置した後、非常停止用の安全FB(SF_EStopB)を追加します。
非常停止用のファンクションブロック(SF_EmergencyStop)が、FSoEMasterの後に追加されました。これにより、FSoE通信が確立された状態で非常停止ボタンの状態を監視し、安全に出力制御できます。
Configure Instance
非常停止ブロック(SF_EmergencyStop)のインスタンス名がまだ未定義の状態で「???」と表示されています。
インスタンス名 ESTOP1 が SF_EmergencyStop ブロックに正しく定義され、FB上にも反映されています。
Assign Parameters
SF_EmergencyStop の各パラメータ(特に S_EStopIn)に変数を割り付け(マッピング)ます。
次はSF_EmergencyStop の S_EStopIn に対して、FSoEスレーブの安全入力(Input0〜Input3)を選択する状態です。
これでSTOP1のS_ESTOPIn入力がInput0になります。
Define new Safety variables
FBの出力に対して型(SAFEBOOL)を指定し宣言を追加します。
Insert Assignment
SF_EmergencyStop ブロックの S_EStopOut 出力に対して、右クリックから「Insert Assignment」を選択し、変数と接続します。
SF_EmergencyStop の出力(S_EStopOut)の右側に、Assignment(代入)ブロックが追加された状態です。
非常停止の出力 S_EStopOut が変数 xReady に割り付けられます。
Done!
Activate Parameters
ESTOP1を最初に永久に有効にするためにTRUEパラメータに割り付けます。
これをFSOEマスターが準備OKのみ有効になるようにします。
Login Safety Program
最後はプログラムを(非安全・安全)CPUにDownloadします。
Result
FSOEマスターとESTOP FBもReadyであることがわかります。
また、赤枠内にある S_StartReset に TRUE が入力されており、手動リセット方式が有効
になっています。そしてS_AutoReset は FALSE なので、自動復帰ではありません。そしてReset 入力は FALSE のまま → 今はリセット信号を送っていない状態です。
次はResetをTRUEにし、ESTOP FBにリセット操作を行います。
それを行うには該当する変数を右クリック>Force All Values..をクリックします。
該当する変数がFORCE TRUEになります。
次はもう一回該当する変数を右クリック>Unforce All Value…をクリックします。
Done!ReadyとS_EStopOut両方ともTRUEになりました。